package com.dkm.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Service;

import com.dkm.entity.Module;
import com.dkm.entity.Permission;
import com.dkm.service.TreeService;
import com.dkm.util.TreeNode;

@Service
public class TreeServiceImpl implements TreeService {

	@Override
	public List<TreeNode> getLayuiModuleTree(List<Module> modules) {
		//创建树节点集合
		List<TreeNode> treeNodes=new ArrayList<TreeNode>();
		//遍历模块集合
		for(Module module:modules) {
			//如果遍历的模块的父节点为0则为最大级别模块
			if(module.getParent_id()==0) {
				//一级模块直接添加到集合中
				//创建节点并设置模块的信息
				TreeNode treeNode=new TreeNode();
				treeNode.setId(module.getModule_id());
				treeNode.setTitle(module.getModule_name());
				treeNode.setPath(module.getPath());
				treeNode.setParentid(module.getParent_id());
				treeNode.setField("module");
				//将节点存到集合中
				treeNodes.add(this.findChildren(treeNode, modules));
			}
		}
		
		return treeNodes;
	}

	@Override
	public TreeNode findChildren(TreeNode treeNode, List<Module> modules) {
		
		//遍历模块集合
		for(Module module:modules) {
			//如果传入的节点的id等于遍历的模块的父模块id
			//则遍历的模块为子节点
			if(treeNode.getId().equals(module.getParent_id())) {
				//如果子集合为空
				if(treeNode.getChildren()==null) {
					//设置子集合
					treeNode.setChildren(new ArrayList<TreeNode>());
				}
				//创建子节点并设置模块的信息
				TreeNode child=new TreeNode();
				child.setId(module.getModule_id());
				child.setTitle(module.getModule_name());
				child.setPath(module.getPath());
				child.setParentid(module.getParent_id());
				child.setField("module");
				
				//添加到子集合中并继续查找子节点
				treeNode.getChildren().add(this.findChildren(child, modules));
			}
		}
		//返回带子集合的节点
		return treeNode;
	}

	@Override
	public List<TreeNode> getLayuiModuleAndPermissionTree(List<Module> modules, List<Permission> permissions) {
		
		//创建树节点集合
		List<TreeNode> treeNodes=new ArrayList<TreeNode>();
		//遍历模块集合
		for (Module module : modules) {
			//如果遍历的模块的父节点为0则为最大级别模块
			if(module.getParent_id()==0) {
				
				//添加到集合中并查找子模块和模块对应的权限集合
				treeNodes.add(this.getModuleAndPermissionChildren(module, modules, permissions));
			}
		}
		
		return treeNodes;
	}

	@Override
	public TreeNode getModuleAndPermissionChildren(Module parent, List<Module> modules,
			List<Permission> permissions) {
		//创建父节点，设置父节点信息
		TreeNode treeNode=new TreeNode();
		treeNode.setId(parent.getModule_id());
		treeNode.setTitle("[模块]"+parent.getModule_name());
		treeNode.setPath(parent.getPath());
		treeNode.setParentid(parent.getParent_id());
		treeNode.setField("module");
		//设置禁用
		//treeNode.setDisabled(true);
		//查找该模块的权限并加入到子集合中
		//遍历权限集合
		for (Permission permission : permissions) {
			//如果传入父模块的模块名称等于遍历的权限信息的模块名称，
			//则为这个模块对应的权限
			if(parent.getModule_name().equals(permission.getPermission_module())) {
				//创建子节点，设置权限信息
				TreeNode permissionChildren=new TreeNode();
				permissionChildren.setId(permission.getPermission_id());
				permissionChildren.setTitle("[权限]"+permission.getPermission_name());
				permissionChildren.setField("permission");
				//如果子集合为空
				if(treeNode.getChildren()==null) {
					treeNode.setChildren(new ArrayList<TreeNode>());
				}
				//加入到子集合中
				treeNode.getChildren().add(permissionChildren);
			}
		}
		
		//查找子模块
		for (Module module : modules) {
			//如果传入的父模块的id等于当前遍历的模块父id，则为子模块
			if(parent.getModule_id().equals(module.getParent_id())) {
				//创建子节点，设置子节点信息
				TreeNode moduleChildren=new TreeNode();
				moduleChildren.setId(module.getModule_id());
				moduleChildren.setTitle("[模块]"+module.getModule_name());
				moduleChildren.setPath(module.getPath());
				moduleChildren.setParentid(module.getParent_id());
				moduleChildren.setField("module");
				//设置禁用
				//moduleChildren.setDisabled(true);
				//如果子集合为空
				if(treeNode.getChildren()==null) {
					treeNode.setChildren(new ArrayList<TreeNode>());
				}
				//添加到子集合中
				treeNode.getChildren().add(this.getModuleAndPermissionChildren(module, modules, permissions));
			}
		}
		return treeNode;
	}

}
